//
// Created by Toosan on 2022/4/22.
//

#include <cstdarg> // 可变参数库
#include "../day08/head/main2_head.h"

/**
 * 可变参数的用法
 * @param count
 * @param ... 可变参数
 */
void sum(int count, ...) {
    // 可变参数的动作
    va_list vp;
    /**
     * 执行完这个函数，vp就有值了 该函数来自cstdarg库
     * 参数1：可变参数开始的动作vp
     * 参数2：内部需要一个存储地址用的参考值，如果没有第二个参数，内部无法处理存放参数的信息
     */
    va_start(vp, count);
    int number;
    /**
     * count也可以用于循环遍历
     */
    for (int i = 0; i < count; ++i) {
        number = va_arg(vp, int); // 执行一遍就会从可变参数里面按执行顺序取一个值
        cout << number << endl;
    }
//    number = va_arg(vp,int);
//    cout << number << endl;
//
//    number = va_arg(vp,int);
//    cout << number << endl;
//
//    number = va_arg(vp,int);
//    cout << number << endl;
//
//    // 3个值已经取完了，再取就越界了，会去到系统值
//    number = va_arg(vp,int);
//    cout << number << endl;
    va_end(vp); // 动作执行结束，关闭阶段
}

class Cat {
public:

    // 静态变量需要在外面初始化？？？
    static int age;

    void update() {
        age = 1;
    }

    static void update2() {
        age = 2;
    }
};
// 定义后，再实现，实现后才能使用静态变量
int Cat::age = 3;
/**
 * 可变参数学习
 * @return
 */
int main_day10_1() {
//int main() {
//    sum(3,7,8,9);
    Cat cat;
    cat.update();
    cout << Cat::age << endl;
    return 0;
}